package d8_demo;

import org.apache.commons.io.FileUtils;

import java.io.File;

public class CopyDirectoryDemo01 {
    public static void main(String[] args) {
        //目标: 完成复制文件夹
        //源文件夹: D:\C  J  W\java-develop\计算机组成原理、计算机网络、计算机操作系统、C程序数据结构
        //目标文件夹: D:\javadevelop\2024班\02阶段java基础进阶\陈某总结\
        //最外层就不要抛-->不可能干掉JVM
        try {
            copyDirectory(
                    new File(
                            "D:\\C  J  W\\java-develop\\计算机组成原理、计算机网络、计算机操作系统、C程序数据结构"),
                    new File(
                            "D:\\javadevelop\\2024班\\02阶段java基础进阶\\陈某总结\\"));
        } catch (Exception e) {
            e.printStackTrace();//打印异常信息
        }
    }

    public static void copyDirectory(File srcDir, File desDir) throws Exception {
        //1、可以做极端判断
        //解释 源文件是null      desDir是null       srcDir不存在          desDir不存在
        if (srcDir == null || desDir == null || !srcDir.exists() || !desDir.exists() ||
                //srcDir是文件         desDir是文件
                srcDir.isFile() || desDir.isFile()) {
            return;//直接刚掉方法
        }

        //2、开始拷贝之前, 先创建目标文件夹-->应为目标文件夹不存在
        //在目标文件夹创建新文件夹名和目标文件夹的名称一样
        File desNewDir = new File(desDir, srcDir.getName());
        desNewDir.mkdirs();
//        System.out.println(desNewDir);


        //3、提取源文件目录的一级文件对象(文件,和文件夹)
        File[] files = srcDir.listFiles();

        //4、判断这个目录下是否可以拿到一级文件夹对象, 一级文件夹是否存在一级文件夹对象
        //使用卫语句进行判断
        //  没有权限 --> null   是空文件夹 -> 0
        if (files == null || files.length == 0) {
           /* System.out.println(files);
            System.out.println(files.length);
            //直接干掉方法
            System.out.println("失败了");*/
            return;
        }
        //到这里证明是可以访问, 并且存在文件
        //5、遍历所有一级文件对象
        for (File file : files) {
            //6、判断这些一级文件夹是文件还是文件夹
            if (file.isFile()) {
                //直接进行复制 --> 使用IO框架
                //源文件: file
                //目标文件: desDir + file.getName()
                FileUtils.copyFile(file, new File(desNewDir , file.getName()));
            } else {
                //7、进行循环递归,进行重复上面的步骤
//                copyDirectory(file, new File(desNewDir + "\\"));
                copyDirectory(file, desNewDir);//File 类会自动拼接 \，不需要你手动加！
            }
        }
    }
}

